/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Nodo;
/**
 *
 * @author Jonathan López, 11106
 * @author Diego Garcia 11360
 * @author Memo
 * @author Xico
 * @author Luis Carlos Velasquez 11085
 */
public class CadenaNodo{
    
    public Nodo nodo;
    public Nodo cabeza=null;
    public Nodo fin=null;
    private int contIndex=0;
    
    public CadenaNodo(){
        this.nodo=nodo;
        this.cabeza=cabeza;
        this.fin=fin;
    }
    
    /**
     * Inserta un nuevo elemento en la lista doblemente enlazada
     */
    public void agregar(int dato){
        Nodo nuevoDato = new Nodo();
        if (vacia()==true){
            cabeza = nuevoDato;
            fin = nuevoDato;
            nuevoDato.setIndex(contIndex);
            contIndex++;
        } else {
            enlace(nuevoDato, cabeza);
            cabeza = nuevoDato;
            nuevoDato.setIndex(contIndex);
            contIndex++;
        }
    }
    
    /**
     * Indica si la lista está vacía
     * @return true si está vacía y false si no lo está
     */
    private boolean vacia(){
        boolean vacia=false;
        if(cabeza==null){
            vacia=true;
        }
        return vacia;
    }
    
    /**
     * Enlaza el elemento nuevo con el siguiente y el anterior. 
     * @param a
     * @param b 
     */
    public void enlace(Nodo a, Nodo b){
        a.siguiente = b;
        b.anterior = a;
    }
    
    public int getLength(){
        return contIndex;
    }
    
    public boolean isEmpty(){
        if (contIndex == 0){
            return true;
        }
        else {
            return false;
        }
    }
    
    public Nodo buscar(int dato) {
        Nodo buscado = null;
        Nodo iterador = cabeza;
        while ( buscado == null && iterador != null ) {
            if ( iterador.index == dato ) {
                buscado = iterador;
            }
            iterador = iterador.siguiente;
        }
        return buscado;
    }
    
    @Override
    public String toString() {
        Nodo iterador = cabeza;
        String toReturn = null;
        while (iterador != null) {
            toReturn += iterador.informacion + "->";
            iterador = iterador.siguiente;
        }
        return toReturn;
    }
   
    public String toString(int dato)  {
        String toReturn;
        Nodo buscado = null;
        Nodo iterador = cabeza;
        while ( buscado == null && iterador != null ) {
            if ( iterador.index == dato ) {
                buscado = iterador;
            }
            iterador = iterador.siguiente;
        }
        toReturn = buscado.toString();
        return toReturn;
    }       
}
